<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>受控组件</title>
  </head>
  <body>
    <div id="test">我是一段文本</div>

    <script src="../js/react.development.js"></script>
    <script src="../js/react-dom.development.js"></script>
    <script src="../js/babel.min.js"></script>

    <script type="text/babel">
      // 创建类式组件
      class Login extends React.Component {
        // 初始化状态
        state = {
          userName: '',
          password: ''
        }

        saveFormData = (dataType) => {
          return (event) => {
            this.setState({
              [dataType]: event.target.value
            })
          }
        }

        // 提交表单
        handleSubmit = (event) => {
          event.preventDefault()
          const { userName, password } = this.state
          alert(userName)
        }
        render() {
          return (
            <form onSubmit={this.handleSubmit}>
              用户名：
              <input
                type="text"
                name="userName"
                placeholder="userName"
                onChange={this.saveFormData('userName')}
              />
              <br />
              密码：
              <input
                type="password"
                name="password"
                placeholder="password"
                onChange={this.saveFormData('password')}
              />
              <br />
              <button>登录</button>
            </form>
          )
        }
      }

      ReactDOM.render(<Login />, document.getElementById('test'))

      // 拓展资料：
      // 高阶函数（以下满足之一就可）：
      // 1. 若A函数接收的参数是一个函数，那么A函数就是一个高阶函数
      // 2. 若A函数返回值依然是一个函数，那么A函数就是一个高阶函数

      // 函数柯里化：
      // 通过函数调用返回函数的方式，实现不同参数最后统一处理的编码形式就是函数柯里化
    </script>
  </body>
</html>
